package algorithm_demo.demo01;

/**
 * 打印计算机一个数字在计算机的二进制表示
 * int 都表示为有符号整型，用32位来表示，long用64位来表示
 *
 * 按位与 & 运算（进位信息）表示，遇0则0, 两个同为1，才为1，其他为0，左移为无符号左移，右移为有符号右移和无符号右移
 * 按位或 | 运算表示，遇1则1,
 * 按位异或 ^ 运算表示，相同为0，相异为1  无进位相加
 *
 *
 * a+b = & + ^
 *
 * 左移<<：左移一位，相当于原数乘2；左移n位，原数乘2^n
 * 右移>>：右移一位，相当于原数除2；右移n位，原数除2^n
 *
 *
 *
 *  ~N+1 = -N
 *
 * num<<1 就等同于num*2
 *
 * @author Api
 * @date 2023/1/25 18:26
 */
public class Code06_PrintB {


    public static void main(String[] args){
        int num = 83928328;
        print(num);

        System.out.println("=====================");
        int a = Integer.MIN_VALUE;
        print(a);
        print(a>>>1);//用0补位，无符号右移
        print(a>>1);//用符号位补位，有符号右移

        System.out.println("=====================");
        int c = 5;
        int d = -c;
        System.out.println(d);
        d = (~c+1);
        System.out.println(c);
        System.out.println(d);


    }

    public static void print(int num){
        for(int i = 31; i>=0; i--){
            System.out.print((num&(1<<i))==0? "0":"1");
        }
        System.out.println();
    }



}
